import { fileURLToPath, URL } from "node:url";
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import Components from "unplugin-vue-components/vite";
import { VantResolver } from "unplugin-vue-components/resolvers";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import path from "path";
import mockDevServerPlugin from "vite-plugin-mock-dev-server";
import vueSetupExtend from "vite-plugin-vue-setup-extend";
import viteCompression from "vite-plugin-compression";
import { createHtmlPlugin } from "vite-plugin-html";
import legacy from "@vitejs/plugin-legacy";
// import esbuild from "rollup-plugin-esbuild";
// 当前工作目录路径
const root: string = process.cwd();

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
	// 环境变量
	const env = loadEnv(mode, root, "");
	return {
		base: env.VITE_PUBLIC_PATH || "/",

		plugins: [
			vue(),
			vueJsx(),
			mockDevServerPlugin(),
			// vant 组件自动按需引入
			Components({
				resolvers: [VantResolver()]
			}),
			// svg icon
			createSvgIconsPlugin({
				// 指定图标文件夹
				iconDirs: [path.resolve(root, "src/icons/svg")],
				// 指定 symbolId 格式
				symbolId: "icon-[dir]-[name]"
			}),
			// 允许 setup 语法糖上添加组件名属性
			vueSetupExtend(),
			// 生产环境 gzip 压缩资源
			viteCompression(),
			// 注入模板数据
			createHtmlPlugin({
				inject: {
					data: {
						ENABLE_ERUDA: env.VITE_ENABLE_ERUDA || "false"
					}
				}
			}),

			legacy({
				targets: ["chrome 75"],
				additionalLegacyPolyfills: ["regenerator-runtime/runtime"],
				renderLegacyChunks: true,
				polyfills: [
					"es.symbol",
					"es.array.filter",
					"es.promise",
					"es.promise.finally",
					"es/map",
					"es/set",
					"es.array.for-each",
					"es.object.define-properties",
					"es.object.define-property",
					"es.object.get-own-property-descriptor",
					"es.object.get-own-property-descriptors",
					"es.object.keys",
					"es.object.to-string",
					"web.dom-collections.for-each",
					"esnext.global-this",
					"esnext.string.match-all"
				]
			})
		],
		resolve: {
			alias: {
				"@": fileURLToPath(new URL("./src", import.meta.url))
			}
		},
		server: {
			port: 5801,
			// 仅在 proxy 中配置的代理前缀， mock-dev-server 才会拦截并 mock
			// doc: https://github.com/pengzhanbo/vite-plugin-mock-dev-server
			proxy: {
				"^/mistake-api": {
					target: "http://172.30.2.87:8081",
					changeOrigin: true,
					rewrite: (path: string) => path.replace(/^\/mistake-api/, "/v1")
				},
				"^/auth-api": {
					target: "http://auth-manage-cloud.dev.hdzk.cloud:28088",
					changeOrigin: true,
					rewrite: (path: string) => path.replace(/^\/auth-api/, "/v1")
				},
				"^/bpm-api": {
					target: "http://172.30.2.87:8082",
					changeOrigin: true,
					rewrite: path => path.replace(/^\/bpm-api/, "")
				},
				"/mio-cdn": {
					target: "http://125.46.20.190:13033",
					changeOrigin: true,
					rewrite: path => path.replace(/^\/mio-cdn/, "")
				}
			}
		},
		build: {
			target: "es2015"
		}
	};
});
